home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Linux Cubed Series 7: Sunsite
/
Linux Cubed Series 7 - Sunsite Vol 1.iso
/
system
/
shells
/
scsh-0.4
/
scsh-0
/
scsh-0.4.2
/
rts
/
condition.scm
< prev
next >
Wrap
Text File
|
1995-10-13
|
2KB
|
77 lines
; -*- Mode: Scheme; Syntax: Scheme; Package: Scheme; -*-
; Copyright (c) 1993, 1994 Richard Kelsey and Jonathan Rees. See file COPYING.
; This is file condition.scm.
;;;; Condition hierarchy
; General design copied from gnu emacs.
(define *condition-types* '())
(define (condition-supertypes type)
(assq type *condition-types*))
(define (define-condition-type type supertypes)
(set! *condition-types*
(cons (cons type (apply append
(map (lambda (sup)
(or (condition-supertypes sup)
(error "unrecognized condition type"
sup)))
supertypes)))
*condition-types*)))
(define (condition-predicate name)
(lambda (c)
(and (pair? c)
(let ((probe (condition-supertypes (car c))))
(if probe
(if (memq name probe) #t #f)
#f)))))
(define (condition? x)
(and (pair? x)
(list? x)
(condition-supertypes (car x))))
(define condition-type car)
(define condition-stuff cdr)
; Errors
(define-condition-type 'error '())
(define error? (condition-predicate 'error))
(define-condition-type 'call-error '(error))
(define call-error? (condition-predicate 'call-error))
(define-condition-type 'read-error '(error))
(define read-error? (condition-predicate 'read-error))
; Exceptions
(define-condition-type 'exception '(error))
(define exception? (condition-predicate 'exception))
(define exception-opcode cadr)
(define exception-arguments cddr)
(define (make-exception opcode args)
(make-condition 'exception (cons opcode args)))
; Warnings
(define-condition-type 'warning '())
(define warning? (condition-predicate 'warning))
(define-condition-type 'syntax-error '(warning))
(define syntax-error? (condition-predicate 'syntax-error))
; Interrupts
(define-condition-type 'interrupt '())
(define interrupt? (condition-predicate 'interrupt))